home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / snapf20.lha / SnapFiles.spot < prev   
Text File  |  1994-05-22  |  11KB  |  437 lines

  1. /* SnapFiles V2.0 By Glenn Wihlborg (2:200/600.39@Fidonet)
  2.  
  3.  * Tries to find possible filenames in messages.
  4.  
  5.  * $VER: SnapFiles 2.0 (22-MAY-94)
  6.  
  7.  * SnapFiles is offered to you under the concepts of Netmailware. That means
  8.    if you are using this in a period of 30 days, I would lika a Netmail
  9.    from you  :):):):) 
  10.  
  11.  * NOTICE!! You must have T: assigned to somewhere in your system */
  12.  
  13. IF ~SHOW(Libraries,'rexxsupport.library') THEN
  14.     IF ~ADDLIB("rexxsupport.library",0,-30,0) THEN DO
  15.       EXIT
  16.     END
  17.  
  18. ADDRESS Spot
  19. OPTIONS Results
  20.  
  21. SIGNAL ON BREAK_C
  22. SIGNAL ON SYNTAX
  23. SIGNAL ON FAILURE
  24.  
  25. Ver = '2.0' /* Current version of SnapFiles */
  26.  
  27. TagNames. = ""
  28. TagCounter = 0
  29.  
  30. /* Fill in these three variables so they fit your system */
  31.  
  32. PathName = 'Outbound:' /* Path to your outbound dir, Must end with ':' or '/' */
  33. TempDir = 'T:SnapFilelist'  /* Path to the tempfile */
  34.  
  35. RexxReq = 1  /* If you have rexxreqtools.library
  36.                 installed, set this to 1 otherwise 0 */
  37.  
  38. IF RexxReq == 1 THEN DO
  39.    Foo = ADDLIB("rexxreqtools.library",0,-30,0)
  40. END
  41.  
  42.  
  43. CR ='0d'x                      /* Carridge return */
  44. LF ='0a'x                      /* Line feed */
  45. AP ='27'x                      /* Is Ascii 39 */
  46. CO ='2C'x                      /* Is Ascii 44 */
  47.  
  48. FileHit = 0 /* If there are possible files this will be set to one */
  49.  
  50. FileLen = 0 /* Length of temporary file, used with progressupdate */
  51. LineLen = 0 /* Length of one line in temp file, used with progressupdate */
  52.  
  53. Twice = 0  /* Counter for dupe filename */
  54. Total = 0  /* Total files found */
  55. NumExt = 10 /* Total extensions to search for */
  56.  
  57. Ext.1 = ".LHA" /* Predefined extensions */
  58. Ext.2 = ".ZIP" /* If you add or remove extensions */
  59. Ext.3 = ".LZH" /* you MUST change the 'NumExt' variable to the */
  60. Ext.4 = ".ARJ" /* right value */
  61. Ext.5 = ".ZOO"
  62. Ext.6 = ".DMS"
  63. Ext.7 = ".ARC"
  64. Ext.8 = ".EXE"
  65. Ext.9 = ".ADS"
  66. EXT.10 = ".GIF"
  67.  
  68. 'ismessages' /* Are we in messages? */
  69.  
  70. IF RC>0 THEN DO
  71.    Note = 'Use in message window only!'
  72.    CALL Notify()
  73.    EXIT
  74. END
  75.  
  76. 'lockgui'
  77. 'getfromaddress'
  78. From = Result
  79.  
  80. 'requestresponse TITLE "SnapFiles 'Ver'" PROMPT "Use Which Nodenumber?"
  81. CENTER GADGETS _From|_Boss|_Other|_Cancel'
  82.  
  83. IF RC = 0 THEN DO
  84.    'unlockgui'
  85.    EXIT
  86. END
  87.  
  88. /* Strip from address e.g. 2:200/600.39 to 2.200.600.39 */
  89. IF RC = 1 THEN DO
  90.    Zon = LEFT(From,POS(':',From)-1)
  91.    From = DELSTR(From,1,POS(':',From))
  92.    Net = LEFT(From,POS('/',From)-1)
  93.    From = DELSTR(From,1,POS('/',From))
  94.    Node = From
  95.    OutReq = PathName||Zon||.||Net||.||Node||'.Req'
  96.    CALL Start()
  97. END
  98.  
  99. /* Strip from address to boss address e.g. 2:200/600.39 to 2.200.600.0 */
  100. IF RC = 2 THEN DO
  101.    Zon = LEFT(From,POS(':',From)-1)
  102.    From = DELSTR(From,1,POS(':',From))
  103.    Net = LEFT(From,POS('/',From)-1)
  104.    From = DELSTR(From,1,POS('/',From))
  105.    Node = LEFT(From,POS('.',From))
  106.    OutReq = PathName||Zon||.||Net||.||Node||0||'.Req'
  107.    CALL Start()
  108. END
  109.  
  110. /* Use another nodenumber */
  111. IF RC = 3 THEN DO
  112.    'requeststring TITLE "New Nodenumber" PROMPT "Format: Z:N/N.P or Z.N.N.P"'
  113.    Other = Result
  114.    IF RC=5 | RC=0 & Other == '' THEN DO
  115.       'unlockgui'
  116.       EXIT
  117.    END
  118.  
  119.    IF POS('.',Other) ~= LASTPOS('.',Other) THEN DO
  120.       OutReq = PathName||Other||'.Req'   
  121.       CALL Start()
  122.    END
  123.  
  124.    Zon = LEFT(Other,POS(':',Other)-1)
  125.    Other = DELSTR(Other,1,POS(':',Other))
  126.    Net = LEFT(Other,POS('/',Other)-1)
  127.    Other = DELSTR(Other,1,POS('/',Other))
  128.    Node = Other
  129.    OutReq = PathName||Zon||.||Net||.||Node||'.Req'
  130.    CALL Start()
  131. END
  132.  
  133. Start:
  134. 'saveascii TO "T:SnapFiles.tmp" OVERWRITE NOHEADER NOKLUDGES NOTEARLINE NOORIGIN'
  135.     IF ~OPEN('Input','T:SnapFiles.tmp', 'READ') THEN DO  /* Temp file */
  136.       Note = 'Unable to open T:SnapFiles.tmp'
  137.       CALL Notify()
  138.       'unlockgui'
  139.       EXIT
  140.    END
  141. ELSE
  142.    FileLen = WORD(STATEF("T:SnapFiles.tmp"),2)  /* Get size of file */
  143.    'progressopen TITLE "SnapFiles 'Ver'" 
  144.    PROMPT "Scanning, Found 'Total' : Dupes 'Twice'"'
  145.    Prequest = Result
  146.    StartTime = TIME('R')  /* Start timer */
  147.  
  148. DO WHILE ~EOF('Input')
  149.    Line = READLN('Input')
  150.    LineLen = LENGTH(Line)
  151.    FileLen = FileLen - LineLen
  152.    ElapTime = TIME('E')
  153.    'progressupdate PROMPT "Elapsed 'ElapTime' s : Found 'Total' : Dupes 'Twice'"' Prequest LineLen FileLen
  154.    IF RC = 5 THEN DO
  155.       CALL BailOut()
  156.    END
  157.  
  158.    DO x = 1 to WORDS(Line)
  159.       Hit = WORD(Line,x)
  160.       WordPos = LASTPOS('.',Hit)
  161.       Extension = UPPER(RIGHT(Hit,4))
  162.          IF RIGHT(Hit,1) ~= '.' & WordPos < 1 THEN DO
  163.             NOP
  164.          END
  165.       ELSE
  166.       DO a = 1 to NumExt
  167.       IF UPPER(RIGHT(Hit,4)) == Ext.a THEN DO
  168.          CALL DoFileList()
  169.          LEAVE
  170.       END
  171.  
  172.       LenHit = LENGTH(Hit)
  173.       LastChar = RIGHT(Hit,LenHit + 1 - LenHit)
  174.       Status = DATATYPE(LastChar,'A')
  175.  
  176.       IF Status ~= 1 THEN DO
  177.          DO WHILE Status ~= 1
  178.             Len = ABS(LENGTH(Hit) - 1)
  179.             IF Len <= 1 THEN LEAVE
  180.             ELSE
  181.             Hit = LEFT(Hit,Len)               
  182.             LenHit = LENGTH(Hit)
  183.             LastChar = RIGHT(Hit,LenHit - LenHit + 1)
  184.             IF POS('.',Hit) = 0 THEN LEAVE
  185.             ELSE
  186.             Status = DATATYPE(LastChar,'A')
  187.          END
  188.       END
  189.  
  190.          LenHit = LENGTH(Hit)
  191.          FirstChar = LEFT(Hit,LenHit - LenHit + 1)
  192.          Status = DATATYPE(FirstChar,'A')
  193.  
  194.       IF Status ~= 1 THEN DO
  195.          DO WHILE Status ~= 1
  196.             Len = ABS(LENGTH(Hit) - 1)
  197.             FirstChar = LEFT(Hit,LenHit - LenHit + 1)
  198.             IF Len <= 1 THEN LEAVE
  199.           ELSE
  200.             Hit = RIGHT(Hit,Len)               
  201.             LenHit = LENGTH(Hit)
  202.             FirstChar = LEFT(Hit,LenHit - LenHit + 1)
  203.             Status = DATATYPE(FirstChar,'A')
  204.          END
  205.       END
  206.  
  207.       IF POS('.',Hit) = 0 THEN LEAVE
  208.       ELSE
  209.       DO a = 1 to NumExt
  210.          IF UPPER(RIGHT(Hit,4)) == Ext.a THEN DO
  211.             CALL DoFileList()
  212.             LEAVE
  213.          END
  214.       END
  215.     LEAVE
  216.     END
  217.   END
  218. END
  219. 'progressclose' Prequest
  220.  
  221. EndTime = TIME('E') /* Stop timer */
  222. TotalTime = (EndTime - StartTime)
  223. CALL CLOSE('Input')
  224. address command 'delete >NIL: T:SnapFiles.tmp'   /* Delete temp file */
  225.  
  226. 'unlockgui'
  227. IF FileHit ~= 1 THEN DO  /* Did we find any filenames? */
  228.    Note = 'No Possible files!!'CR'Operation took 'TotalTime' Sec.'
  229.    CALL Notify()
  230.    EXIT
  231. END
  232. ELSE
  233. Request = 'All done found 'Total' File(s)'CR''Twice' Duplicate Filenames.'CR'Operation took 'TotalTime' Sec.'
  234. CALL Request()
  235.  
  236. DoFileList: /* Create filelist */
  237. FileHit = 1 /* Found one or more files */
  238. IF ~EXISTS(TempDir) THEN DO
  239.    ADDRESS COMMAND 'makedir >NIL: 'TempDir'' /* Make tempdir for file list */
  240. END
  241.  
  242. Out = TempDir||'/'Hit
  243. IF EXISTS(Out) THEN DO
  244.    Twice = Twice + 1
  245.    RETURN
  246. END
  247. ELSE
  248. IF ~OPEN('List',Out,'W') THEN DO
  249.    Note = 'Can not create FileList: 'Out''
  250.    CALL Notify()
  251. END
  252.    CALL WRITELN('List',Hit)
  253.    CALL CLOSE('List')
  254.    Total = Total + 1
  255. RETURN
  256.  
  257. TagFile: /* Tag one or more files */
  258. TagPath = TempDir
  259. IF RexxReq == 1 THEN DO
  260.    CALL rtfilerequest(TagPath, , "Select files", , "rtfi_flags=freqf_multiselect" "rt_pubscrname=SPOT", Files)
  261.       IF Files == 0 THEN DO
  262.          ADDRESS COMMAND 'delete ALL >NIL: 'TempDir'' /* Delete all files */
  263.          EXIT
  264.       END
  265.     DO X = 1 TO Files.Count
  266.       IF ~OPEN('File',Files.X,'R') THEN DO
  267.          Note = 'Can NOT open Tagfile'
  268.          CALL Notify()
  269.          EXIT
  270.       END
  271.  
  272.       Line = READLN('File')
  273.       CALL CLOSE('File')
  274.  
  275.       Taged = Line
  276.  
  277.       TagCounter = TagCounter + 1
  278.       TagNames.TagCounter = Taged
  279.    END
  280.  
  281.    Files = SHOWDIR(TempDir,'F')
  282.    IF Files ~= '' THEN DO
  283.    ADDRESS COMMAND 'delete ALL >NIL: 'TempDir'' /* Delete all files */
  284.  
  285.    IF TagCounter = 0 THEN EXIT
  286.  
  287.    IF ~EXISTS(OutReq) THEN DO
  288.       IF ~OPEN('FileReq',OutReq,'W') THEN DO
  289.          Note = 'Can not create Req file: 'Out'.'
  290.          CALL Notify()
  291.          EXIT
  292.       END
  293.    END
  294. CALL OPEN('FileReq',OutReq,'A')
  295.  
  296. DO I = 1 TO TagCounter
  297.    CALL WRITELN('FileReq',TagNames.I)
  298. END
  299.    CALL CLOSE('FileReq')
  300.    RETURN
  301. END
  302. END
  303.  
  304. DO FOREVER
  305. 'requestfile TITLE "Tag File(s)" PATH 'TagPath''
  306.    GetFile = Result
  307.    IF RC=5 | RC=0 & GetFile == '' THEN LEAVE
  308.    IF ~OPEN('File',GetFile,'R') THEN DO
  309.       Note = 'Can NOT open Tagfile'
  310.       CALL Notify()
  311.       CALL TagFile()
  312.    END
  313.  
  314.    Line = READLN('File')
  315.    CALL CLOSE('File')
  316.  
  317.    Taged = Line
  318.  
  319.    TagCounter = TagCounter + 1
  320.    TagNames.TagCounter = Taged
  321.    ADDRESS COMMAND 'delete >NIL: 'GetFile'' /* Delete file */
  322. END
  323.  
  324. Files = SHOWDIR(TempDir,'F')
  325. IF Files ~= '' THEN DO
  326.    ADDRESS COMMAND 'delete ALL >NIL: 'TempDir'' /* Delete all files */
  327. END                                             /* if there are any */
  328.  
  329. ADDRESS COMMAND 'delete >NIL: 'TempDir''        /* Delete tempdir */
  330.  
  331. IF TagCounter = 0 THEN EXIT
  332.  
  333. IF ~EXISTS(OutReq) THEN DO
  334.    IF ~OPEN('FileReq',OutReq,'W') THEN DO
  335.       Note = 'Can not create Req file: 'Out'.'
  336.       CALL Notify()
  337.       EXIT
  338.    END
  339. END
  340.  
  341. CALL OPEN('FileReq',OutReq,'A')
  342.  
  343. DO I = 1 TO TagCounter
  344.       CALL WRITELN('FileReq',TagNames.I)
  345. END
  346. CALL CLOSE('FileReq')
  347. RETURN
  348.  
  349. TagAll: /* Tag all files auotomaticly */
  350. TagAllPath = TempDir
  351.  
  352. Files = SHOWDIR(TagAllPath,'F')
  353.    DO x = 1 TO WORDS(Files)
  354.      NameOfFile = WORD(Files,x)
  355.       In = TagAllPath||'/'NameOfFile
  356.       IF ~OPEN('File',In,'R') THEN DO
  357.          Note = 'Can not open tagfile'
  358.          CALL Notify()
  359.       END
  360.    Line = READLN('File')
  361.    CALL CLOSE('File')
  362.  
  363.    Taged = Line
  364.  
  365.    TagCounter = TagCounter + 1
  366.    TagNames.TagCounter = Taged
  367. END
  368.  
  369. ADDRESS COMMAND 'delete ALL >NIL: 'TempDir'' /* Delete all files */
  370.  
  371. IF ~EXISTS(OutReq) THEN DO
  372.    IF ~OPEN('FileReq',OutReq,'W') THEN DO
  373.       Note = 'Can not create Req file: 'Out'.'
  374.       CALL Notify()
  375.       EXIT
  376.    END
  377. END
  378. CALL OPEN('FileReq',OutReq,'A')
  379.  
  380. DO I = 1 TO TagCounter
  381.    CALL WRITELN('FileReq',TagNames.I)
  382. END
  383.  
  384. CALL CLOSE('FileReq')
  385. RETURN
  386.  
  387. BailOut:  /* --- If user stops the operation, check this --- */
  388. 'progressclose' Prequest
  389. 'unlockgui'
  390. CALL CLOSE('Input')
  391. ADDRESS COMMAND 'delete >NIL: T:SnapFiles.tmp'   /* Delete temp file */
  392.  
  393. IF FileHit ~= 1 THEN DO  /* Did we find any filenames ? */
  394.    Note = 'Bailing out!!'CR'Found No Possible file names.'
  395.    CALL Notify()
  396.    EXIT
  397. END
  398. ELSE
  399. Request = 'Bailing out!!'CR'Possible File(s) 'Total'.'CR''Twice' Duplicate Filenames.'
  400. CALL Request()
  401.  
  402. Notify:
  403. 'requestnotify PROMPT "'Note'" CENTER'
  404. RETURN
  405.  
  406. Request:
  407. 'requestresponse TITLE "SnapFiles 'Ver'" PROMPT "'Request'"
  408. CENTER GADGETS _Tag|_All|_Cancel'
  409.  
  410. IF RC = 0 THEN DO
  411.    ADDRESS COMMAND 'delete ALL >NIL: 'TempDir'' /* Delete all files */
  412.    EXIT
  413. END
  414.  
  415. IF RC = 1 THEN DO
  416.    CALL TagFile()
  417.    'filerequest'
  418.    EXIT
  419. END
  420.  
  421. IF RC = 2 THEN DO
  422.    CALL TagAll()
  423.    'filerequest'
  424.    EXIT
  425. END
  426.  
  427. /* --- Error handler (Hopefully it will not be used :) ) --- */
  428. BREAK_C:
  429. SYNTAX:
  430. FAILURE:
  431. 'progressclose' Prequest
  432. 'unlockgui'
  433. Note = ''Errortext(RC) 'at line' SIGL''
  434. CALL Notify()
  435. EXIT
  436. END
  437.